#pragma once
#include <stack>
#include <vector>
#include "grid.h"
#include "matrix.h"

class primitive;
typedef primitive* primitive_ptr;

class primitive {
    public:
    virtual bool diceable(const matrix4f& view, float shadingrate, int gridsize, int& u, int& v) = 0;
    virtual void split(std::stack<primitive_ptr>&) = 0;
    virtual grid<vertex>* dice(int uratio, int vratio) = 0;
    virtual void bound() = 0;
};
